#ifndef __STUDENT_H__
#define __STUDENT_H__
#include "admin.h"

typedef struct Student
{
    char id[20];
    char name[20];
    char class[20];
    int age;
    int sex; // 0女 1男
} Student_t, *Student_p;

typedef struct Student_Node
{
    Student_p data;
    struct Student_Node *next;
    struct Student_Node *prev;
} Student_Node_t, *Student_Node_p;

enum MEUN_CHOICE
{

    EXIT_SYSTEM = 0, // 退出系统
    ADD_STUDENT,     // 添加学生
    DELETE_STUDENT,  // 删除学生
    UPDATE_STUDENT,  // 修改学生
    VIEW_STUDENT,    // 查看学生
    VIEW_ALL_ADMINS, // 查看所有管理员
    GIVE_PRIVILEAGE, // 赋予权限
    LOGOUT           // 注销
};

Student_Node_p student_Init();                                                     // 初始化学生信息
Student_Node_p studentNode_Create();                                               // 创建学生节点
Student_Node_p find_studentNode(Student_Node_p stu_head, int index);               // 查找学生节点
int getStudentIndex_ByID(Student_Node_p stu_head, char *id);                       // 通过学号获取对应学生索引
int stuCount(Student_Node_p stu_head);                                             // 统计学生节点个数
void insert_studentNode(Student_Node_p stu_head, int index);                       // 插入学生节点（指定位置）
void insertTail_studentNode(Student_Node_p stu_head);                              // 插入学生节点（尾插法）
int delete_studentNode(Student_Node_p stu_head, int index);                        // 删除学生节点
Student_Node_p updata_studentNode(Student_Node_p stu_head, int index);             // 更新学生节点
void print_ALLStudentInfo(Student_Node_p stuNode);                                 // 打印所有学生信息
Student_Node_p add_studentInfo(Student_Node_p stu_head, Student_Node_p stuNode);   // 输入新增学生信息
Student_Node_p scanf_studentInfo(Student_Node_p stu_head, Student_Node_p stuNode); // 输入学生信息
void print_StudentNodeByName(Student_Node_p stu_head, char *name);                 // 根据学生姓名查找并打印该学生信息
int getStuCountByName(Student_Node_p stu_head, char *name);                        // 根据学生姓名查找统计该学生个数
int getStuCountByClass(Student_Node_p stu_head, char *class);                      // 根据班级查找统计该班级学生个数

void printf_function_menu(int login_flag);                                                   // 打印主菜单函数
int menuOperate(int menu, int login_flag, Student_Node_p stu_head, Admin_Node_p admin_head); // 执行菜单
char *getSex(int sex);                                                                       // 获取性别
void add_student(Student_Node_p stu_head);                                                   // 录入学生信息
void delete_student(Student_Node_p stu_head);                                                // 删除学生信息
void updata_student(Student_Node_p stu_head);                                                // 修改学生信息
void print_student(Student_Node_p stuNode);                                                  // 打印学生信息
void show_student(Student_Node_p stu_head);                                                  // 选择查看方式
void show_one(Student_Node_p stu_head);                                                      // 查看学生信息
void show_all(Student_Node_p stu_head);                                                      // 查看所有学生信息
void show_class(Student_Node_p stu_head);                                                    // 查看班级学生信息

#endif
